#ifndef SERVER_SOCKET_H
#define SERVER_SOCKET_H
#include <netdb.h>
#include "common_gestor_envios.h"

class Server_socket {
private:
    int fd;
    struct sockaddr_in addr;
    Gestor_envios* gestor;
public:
    /* Constructor del socket, asignandole un fd y una direccion que contiene informacion
     * del puerto e IP del server */
    Server_socket(int port);
    /* Constructor por default */
    Server_socket();
    /* Destructor */
    ~Server_socket();
    /* Devuelve el fd del socket */
    int get_fd();
    /* Devuelve el address del socket */
    struct sockaddr_in get_addr();
    /* Se asocia al socket con su puerto y se comienza a escuchar conexiones */
    int escuchar_puerto();
    /* Se acepta una conexion asignandole a new el fd, y adrress con informacion
     * de cliente */
    int aceptar_conexion(Server_socket* nuevo);
    /* Envia un mensaje, controlando que llegue completo */
    int enviar(int aux_fd, std::string buffer, int tam);
    /* Recibe un mensaje, controlando que llegue completo */
    int recibir(int aux_fd, std::string* buffer, int tam);
    /* Cierra la comunicacion en ambas direcciones */
    void cerrar_comunicacion();
    /* Cierra el fd del socket */
    void cerrar();
};

#endif
